// watcher的作用
// 1、当创建watcher实例的时候要把创建的实例放到Dep实例的subs数组中 通过14-19行实现
// 2、当数据发生改变时 更新视图

class Watcher { // 观察者
  constructor(vm, key, callback) {
    this.vm = vm;
    // data 中的属性名称
    this.key = key;
    this.callback = callback;
    // 每当创建 watcher 对象时，需要把当前的watcher实例 添加到 Dep 的subs 数组中
    // 关联的是 observer.js 中的get方法 当Dep有静态属性target 就触发 addSub
    // 把watcher实例记录到Dep类的静态属性 target中
    Dep.target = this;
    // 触发get方法，在get方法中会调用addSub
    this.oldValue = vm[key];
    // 添加完后 要重置为null
    Dep.target = null;
  }

  update() {
    let newVal = this.vm[this.key];
    if (this.oldValue === newVal) return;
    this.oldValue = newVal;
    this.callback(newVal);
  }
}